package com.px.project.module.it.controller;

import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import lombok.RequiredArgsConstructor;
import com.px.common.dto.BaseBodyDto;
import com.px.common.dto.BaseQueryDto;
import com.px.common.vo.RatioVo;
import com.px.project.module.it.dto.ProductCheckDto;
import com.px.project.module.it.dto.ProductCheckQueryDto;
import com.px.project.module.it.service.IProductCheckService;
import com.px.project.module.it.vo.CheckNumVo;
import com.px.project.module.it.vo.ProductCheckVo;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

import java.util.List;

/**
 * 智能排产》工序验收 前端控制器
 *
 * @author 品讯科技
 * @since 2023-10-31
 */
@RestController
@RequestMapping("/it/product_check")
@RequiredArgsConstructor
public class ProductCheckController {

    private final IProductCheckService productCheckService;

    /**
     * 根据id查询工序验收详情
     *
     * @param id id
     * @return {@link ProductCheckVo }
     * @author 品讯科技
     * @date 2024-08
     */
    @GetMapping("/get/{id}")
    public ProductCheckVo getById(@PathVariable("id") Long id) {
        return productCheckService.getById(id);
    }

    /**
     * 分页查询工序验收
     *
     * @param pageDto  分页 DTO
     * @param queryDto 查询 DTO
     * @return {@link Page }<{@link ProductCheckVo }>
     * @author 品讯科技
     * @date 2024-08
     */
    @GetMapping("/page")
    public Page<ProductCheckVo> page(@Validated BaseQueryDto<ProductCheckVo> pageDto, ProductCheckQueryDto queryDto) {
        return productCheckService.page(pageDto, queryDto);
    }

    /**
     * 保存工序验收
     *
     * @param dto DTO
     * @return {@link Long }
     * @throws Exception 例外
     * @author 品讯科技
     * @date 2024-08
     */
    @PostMapping("/save")
    public Long save(@RequestBody ProductCheckDto dto) throws Exception {
        return productCheckService.save(dto);
    }

    /**
     * 更新工序验收
     *
     * @param dto DTO
     * @return {@link Boolean }
     * @throws Exception 例外
     * @author 品讯科技
     * @date 2024-08
     */
    @PostMapping("/update")
    public Boolean update(@RequestBody ProductCheckDto dto) throws Exception {
        return productCheckService.update(dto);
    }

    /**
     * 删除工序验收
     *
     * @param dto 请求body基础 DTO
     * @return {@link Boolean }
     * @author 品讯科技
     * @date 2024-08
     */
    @PostMapping("/delete")
    public Boolean delete(@RequestBody @Validated BaseBodyDto dto) {
        return productCheckService.removeByIds(dto.getIdList());
    }

    /**
     * 立即生成检验报告
     *
     * @param id 编号
     * @return {@link Boolean }
     * @throws Exception 例外
     * @author 品讯科技
     * @date 2024-08
     * @ignore
     */
    @GetMapping("/generatorCheckReport/{id}")
    public Boolean generatorCheckReport(@PathVariable("id") Long id) throws Exception {
        return productCheckService.generatorCheckReport(id);
    }

    /**
     * 过程质检看板》工序验收数量
     *
     * @return {@link CheckNumVo }
     * @author 品讯科技
     * @date 2024-08
     */
    @GetMapping("/getCheckNumVo")
    public CheckNumVo getCheckNumVo(){
        return productCheckService.getCheckNumVo();
    }

    /**
     * 过程质检看板》工序验收分布
     *
     * @return {@link List }<{@link RatioVo }>
     * @author 品讯科技
     * @date 2024-08
     */
    @GetMapping("/getProductBranchTrendVo")
    public List<RatioVo> getProductBranchTrendVo(){
        return productCheckService.getProductBranchTrendVo();
    }

}
